package toolbox

import (
	"math/rand"
	"strings"
)

// 常量
const (
	// PureNumbers 纯数字
	PureNumbers = 0
	// LowercaseLetters 小写字母
	LowercaseLetters = 1
	// UppercaseLetters 大写字母
	UppercaseLetters = 2
	// LettersAndNumbers 字母与数字
	LettersAndNumbers = 3
)

// RandomStrings 生成随机字符串
// size: 字符串长度
// kind: 字符串类型，0-纯数字，1-小写字母，2-大写字母，3-字母与数字
// 返回值：随机字符串
func RandomStrings(size int, kind int) string {
	iKind, kinds, result := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size)
	isAll := kind < 0 || kind > 2
	for i := 0; i < size; i++ {
		if isAll { // random ik
			iKind = rand.Intn(3)
		}
		scope, base := kinds[iKind][0], kinds[iKind][1]
		result[i] = uint8(base + rand.Intn(scope))
	}
	return string(result)
}

// RandomStringToUpper 生成随机字符串并转换为大写
// size: 字符串长度
// kind: 字符串类型，0-纯数字，1-小写字母，2-大写字母，3-字母与数字
// isUpper: 是否转换为大写
// 返回值：随机字符串
func RandomStringToUpper(size int, kind int, isUpper bool) string {
	if isUpper {
		return strings.ToUpper(RandomStrings(size, kind))
	}
	return RandomStrings(size, kind)
}
